package leetcode_jz_offer.day12_list;

/**
 * 若两个链表有焦点，两个链表同时向后遍历，若某个链表到达终点
 * 让它从对方链表的表头出发，继续后移，最后两个链表一定会在交点回合，如果没有交点，便是两个同时走到null
 **/
public class Num52_两个链表的第一个公共节点 {
        public class ListNode {
          int val;
          ListNode next;
          ListNode(int x) {
              val = x;
              next = null;
          }
      }
    public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
            ListNode nodeA=headA;
            ListNode nodeB=headB;
            while (nodeA!=nodeB){
                //遍历nodeA,nodeB
                //当nodeA走到空让nodeA继续走headB对应的路
                //当nodeB走到空让nodeB继续走headA对应的路
                nodeA=nodeA==null?headB:nodeA.next;
                nodeB=nodeB==null?headA:nodeB.next;
            }
            //先遍历完自己再遍历对方，此时他们长度一定同步，走到空便同时走到空，不为空则一定交在某点
            //nodeA==nodeB,两种情况
            //1.同时空，return nodeA就是return null了
            //2.或者同时到达交点，return node1就是return交点，即第一个公共节点
            return nodeA;
    }
}
